草庐IT

Android AsyncTask 内存泄漏

全部标签

c++ - 引用会导致内存泄漏吗?

这个问题在这里已经有了答案:Returningtemporaryobjectandbindingtoconstreference[duplicate](1个回答)关闭7年前。考虑以下C++代码。structfoo{std::stringvalue;}inlinefoobar(){return{"42"};}现在假设我有一个以下列方式使用bar()的函数。std::stringmy_func(){constauto&x=bar();returnx.value;}这是否泄漏内存因为my_func只持有对x的引用?或者在my_func终止后x是否仍然被清理?我知道这不是应该使用引用的方式。但

c++ - 优化长时间的内存读写

我有一个名为reorder.cc的源文件,如下所示:voidreorder(float*output,float*input){output[56]=input[0];output[57]=input[1];output[58]=input[2];output[59]=input[3];output[60]=input[4];...output[75]=input[19];output[76]=input[20];output[77]=input[21];output[78]=input[22];output[79]=input[23];output[80]=input[24];...

c++ - 变量的 block 结构内存分配

for(inti=0;i在这里,我想知道变量x的内存是否会被分配两次,或者该值是否在退出第二个block后才重置并且内存只分配一次(对于x)? 最佳答案 从C编程模型的角度来看,x的两个定义是两个完全不同的对象。内部block中的赋值不会影响外部block中x的值。此外,循环的每次迭代的定义也算作不同的对象。在一次迭代中为任一x赋值不会影响后续迭代中的x。就实际实现而言,假设未进行优化,有两种常见情况。如果您打开了优化,您的代码可能会被丢弃,因为编译器很容易发现循环对它之外的任何东西都没有影响,除了i。两种常见的场景是变量存储在栈中

C++ 悬挂指针和内存泄漏

我很难理解如何区分悬挂指针和内存泄漏。最近的一个作业有几个问题很纳闷,看了之后还是很纳闷。我不希望有人为我做功课,我希望能够理解为什么事情是这样的,如果这有意义的话。那么,作业:鉴于声明:int*ptrA,*ptrB;判断下面的每个代码段是否会导致内存泄漏、悬空指针或两者都不会。画图来帮忙。我猜这没问题,因为ptrA已经指向内存中的某些内容,所以这既不是悬挂指针也不是内存泄漏。ptrA=newint;ptrB=newint;*ptrA=345;ptrB=ptrA;我猜这是一个悬垂指针,因为345已从内存中释放,所以ptrB没有指向任何内容。ptrA=newint;*ptrA=345;p

c++ - 在 C++ 中为 3D 数组分配连续内存

我能够分配连续内存以在C++中分配二维数组。我不知道如何为3D阵列做。我已经阅读了一些帖子,但我无法想出解决方案。#includeusingnamespacestd;intmain(intargc,char**argv){cout 最佳答案 具有P平面的3d数组,每个平面都有R行和C列将需要P*R*C元素。您可以立即分配它们,例如:Element*p=newElement[P*R*C];然后访问坐标(p,r,c)处的元素,您可以使用公式:intindex=(p*R+r)*C+c;为了让事情变得可读,一个简单的解决方案是创建一个类te

c++ - 内存使用对算法复杂度的影响

我正在阅读关于C++STL算法的NicolaiJosuttis书。对于很多算法比如stable_sort(),他提到算法的复杂度n*log(n)如果有足够的内存可用,否则就是n*log(n)*log(n)。我的问题是内存使用如何影响复杂性?STL是如何检测到这种情况的? 最佳答案 查看gcc的STL,您会在stl_algo.h中找到inplace_merge.这是合并排序的传统合并实现,复杂度为O(N),使用与输入大小相同的缓冲区。此缓冲区是通过_Temporary_buffer分配的,来自stl_tempbuf.h.这会调用get

c++ - 从内存加载图像,GDI+

这是一个快速简单的问题:使用C++中的GDI+,我如何从内存中的像素数据加载图像? 最佳答案 使用SHCreateMemStream,它接受一个指向数据的指针和数据的大小。IStream*pStream=SHCreateMemStream((BYTE*)InputBuffer,Size);//DowhatyouwantpStream->Release(); 关于c++-从内存加载图像,GDI+,我们在StackOverflow上找到一个类似的问题: https

c++ - 在 C++ 中重用内存

只是想知道是否建议使用这种代码来提高性能?voidfunctionCalledLotsofTimes(){staticint*localarray=NULL;//sizeisalargeconstant>10000if(localarray==NULL)localarray=newint[size];//Algorithmgoeshere}我也很好奇像g++这样的现代c++编译器是如何实现静态变量的。它们是否像全局变量一样处理? 最佳答案 不推荐,因为你是在给一个函数引入全局状态。当函数中有全局状态时,就会产生副作用。副作用会导致问

c++ - 多个 C++ 删除多个对象指向的内存

另一个C++指针删除问题如下例:classFoo{public:int*p;~Foo(){deletep;p=NULL;}};Foo*f1=newFoo();Foo*f2=newFoo();f1->p=newint(1);f2->p=f1->p;deletef2;//okdeletef1;//noerror?为什么我在调用“deletef1”时没有报错?我不是删除了同一个地址(*p)两次吗?如果直接删除最后两行代码中的指针,会报错。deletef2->p;//okdeletef1->p;//error!!***glibcdetected***doublefreeorcorruption

c++ - Windows 任务管理器确定程序内存使用情况的可靠性如何?

我可以使用任务管理器来检测巨大的内存泄漏吗?我有一个小型文本解析程序,当我启动它时显示内存使用量约为640K。当我解析一个文件并对其进行索引时,内存使用量会根据文件的大小而增加。然后当我“清除”索引时,我的内存使用量下降到1400K左右。在这一点之后,我可以添加任意数量的文件,当我清除索引时,内存使用量下降到1400k级别+或-~5%。这是在我对程序进行更改之后。在更改之前,每次我对一些文件进行索引然后清除时,内存使用量都会继续上升。因此,在多次清除之后,我的程序的内存使用量越来越大。我意识到这可能是一种分析我的应用程序的“hackish”方式,但我是一名学生,我所能找到的都是商业分析